let indexModule = (() => {
  // DOM获取，jq获取子DOM节点的find方法
  let baseBox = $('.baseBox'),
    baseSpan = baseBox.find('span'),
    baseSignout = baseBox.find('a'),
    menuBox = $('.menuBox'),
    navBox_list = $('.navBox>a'),
    itemBox_list = [],
    iframeBox = $('.iframeBox')

  // jq的发布订阅，管理获取数据后的一系列事件。创建订阅中心
  let plan = $.Callbacks();
  // 添加订阅者（事件）：做用户信息的处理
  plan.add((_, baseInfo_2beGiven) => {
    // jq设置标签插槽内容
    baseSpan.html(`您好：${baseInfo_2beGiven.name || ''}`);
    // 退出事件函数挂载
    baseSignout.click(async () => {
      // 服务器需要删除sid信息才算退出成功
      let res = await axios.get('/user/signout');
      if (res.code == 0) {
        localStorage.clear();
        window.location.href = 'login.html';
        alert('退出登录成功')
        return;
      }
      alert('退出登录失败，请稍后重试')
    })
  });
  // 添加订阅者（事件）：做权限信息的处理（根据权限选择左侧menu）
  plan.add((power_2beGiven, _) => {
    let str = ``;
    // 如果有员工管理权限
    if (power_2beGiven.includes('userhandle')) {
      str += `<div class="itemBox" text="员工管理">
                <h3>
                  <i class="iconfont icon-yuangong"></i>
                  员工管理
                </h3>
                <nav class="item">
                  <a href="../page/userlist.html" target="iframeBox">员工列表</a>
                  <a href="../page/useradd.html" target="iframeBox">新增员工</a>
                </nav>
              </div>`
    }
    // 如果有部门管理权限
    if (power_2beGiven.includes('departhandle')) {
      str += `<div class="itemBox" text="部门管理">
      <h3>
        <i class="iconfont icon-guanliyuan"></i>
        部门管理
      </h3>
      <nav class="item">
        <a href="../page/departmentlist.html" target="iframeBox">部门列表</a>
        <a href="../page/departmentadd.html" target="iframeBox">新增部门</a>
      </nav>
    </div>`
    }
    if (power_2beGiven.includes('jobhandle')) {
      str += `<div class="itemBox" text="职务管理">
      <h3>
        <i class="iconfont icon-zhiwuguanli"></i>
        职务管理
      </h3>
      <nav class="item">
        <a href="../page/joblist.html" target="iframeBox">职务列表</a>
        <a href="../page/jobadd.html" target="iframeBox">新增职务</a>
      </nav>
    </div>`
    }
    if (power_2beGiven.includes('customer')) {
      str += `<div class="itemBox" text="客户管理">
      <h3>
        <i class="iconfont icon-kehuguanli"></i>
        客户管理
      </h3>
      <nav class="item">
        <a href="../page/customerlist.html?lx=my" target="iframeBox">我的客户</a>
        ${power_2beGiven.includes('customerall') ? `<a href="../page/customerlist.html?lx=all" target="iframeBox">全部客户</a>` : ``}
        <a href="../page/customeradd.html" target="iframeBox">新增客户</a>
      </nav>
    </div>`
    }
    menuBox.html(str);
    // 动态获取
    itemBox_list = menuBox.find('.itemBox');
  })
  // 添加订阅者（事件）：做权限信息的处理（根据权限选择组织结构、客户管理的内容）
  plan.add((power_2beGiven, _) => {

    // 默认显示选中组织结构
    let
      group1 = itemBox_list.filter((_, item) => {
        return $(item).attr('text') === '客户管理'
      }),
      group2 = itemBox_list.filter((_, item) => {
        return /^(员工管理|部门管理|职务管理)$/.test($(item).attr('text'))
      }),
      initial_index = power_2beGiven.includes('customer') ? 0 : 1,
      handleshow = function (initial_index) {
        if (initial_index == 0) {
          group1.css('display', 'block')
          group2.css('display', 'none')
        } else {
          group2.css('display', 'block')
          group1.css('display', 'none')
        }
      }


    navBox_list.eq(initial_index).addClass('active').siblings().removeClass('active')
    handleshow(initial_index)
    // 点击切换
    navBox_list.click(function () {
      let index = $(this).index(),
        text = $(this).html().trim();
      if (index === initial_index) return;
      // 先进行权限校验
      if (text === '客户管理' && !/customer/.test(power_2beGiven)) {
        alert(`您无权访问客户管理模块`);
        return
      }
      if (text === '组织结构' && !/(userhandle|departhandle|jobhandle)/.test(power_2beGiven)) {
        alert('您无权访问组织结构模块');
        return;
      }
      // 切换实现
      $(this).addClass('active');
      navBox_list.eq(initial_index).removeClass('active')
      initial_index = index
      handleshow(initial_index)
    })
  })
  // 添加订阅者（事件）：做权限信息的处理（根据权限默认显示）
  plan.add((power_2beGiven, _) => {
    let url = './page/customerlist.html?lx=my';
    if (!power_2beGiven.includes('customer')) {
      url = './page/userlist.html'
    }
    iframeBox.attr('src', url)
  })
  return {
    // 进入页面的初始化操作
    async init() {
      // 验证用户是否登录
      let res = await axios.get('/user/login');
      if (res.code != 0) {
        // 若没有，重定向路由到login页面
        alert('请先登录');
        window.location.href = 'login.html'
        return;
      }


      // 获取权限信息、个人信息
      let [
        power, baseInfo
      ] = await axios.all([axios.get('/user/power'), axios.get('/user/info')]);
      power.code == 0 ? power = power.power : null;
      baseInfo.code == 0 ? baseInfo = baseInfo.data : null;


      // 页面初始化：练习发布订阅
      // 订阅中心发布新信息（因为异步拿到了数据）
      plan.fire(power, baseInfo);
    }
  }
})()

indexModule.init()